# Работа с файлами в Python

### Доступ к файлу с данными бывает трех видов:
* Открыть файл **для чтения** данных
> Программа только видит данные, но не может вносить в них изменения (файл нельзя испортить)

```py
open(“notes.txt”, “r”)
```
* Открыть файл **для записи** данных
> Программа может записать новые данные в файл (старое содержимое удаляется!)

```py
open(“notes.txt”, “w”)
```
* Открыть файл **для дозаписи**
> Программа может записать данные в файл, добавив новые строки после уже имеющихся

```py
open(“notes.txt”, “a”)
```

## Чтение данных из файла с помощью оператора with
---
##### Файл для работы должен лежать в одной папке с программой!
---
|   Назначение функции     |         Функция в Python            |
|--------------------------|:-----------------------------------:|
|            Открытие файла на чтение           | with open(“notes.txt”, “r”) as file:   |
|              Чтение данных файла              |       data = file.read()               |
| Чтение данных файла (результат — набор строк) |       lines = file.readlines()         |
|       Закрыть файл по окончании работы        | Файл закроется автоматически после окончания блока оператора with |

## Проблема разных кодировок
На разных операционных системах одним и тем же символам могут соответствовать разные последовательности машинных кодов из нулей и единиц.
Чтобы избежать путаницы в символах, мы установим файлам проекта кодировку utf-8. Тогда и на Windows, и на Linux, и на Mac OS текстовые файлы будут читаться одинаковым образом.

Для этого при работе с файлами нужно добавлять параметр:
```py
encoding = ‘utf-8’
```
Тогда команды для чтения файлов примут вид:

```py 
with open("poem.txt", "r", encoding = "utf-8") as file:
```
```py
open("poem.txt", "r", encoding = "utf-8")
```

## Построчное чтение данных

```
Иванов О. 4
Петров И. 3
Дмитриев Н. 2
Смирнова О. 4
Керченских В. 5
Котов Д. 2
Бирюкова Н. 5
Данилов П. 3
Аранских В. 5
Лемонов Ю. 2
Олегова К. 4
```

1. Открыть файл для чтения информации.
2. Считывать информацию построчно: 1 строка — 1 ученик.
3. Слово до первого пробела — это фамилия.
4. Последний символ строки — это оценка.

![](images/img1.png)
```py
data = line.split(" ") # делим по пробелам
```
Получим:
```py
data = ['Керченских', 'В.', '5\n']
        # data[0]          data[2]
```

